/****************************************************
 * 创建人:   robin
 * 创建时间: 2023/8/30.030 14:51
 * 项目名称: cpy
 * 文件名称: ReturnCodeEnum.java
 * 文件描述: 
 *
 * All rights Reserved, Designed By 德品软件
 * @Copyright:2023-2023
 *
 ********************************************************/

package com.dp.enumeration;

public enum ReturnCodeEnum {
    UNKONW("UNKONW", "未知"),
    
    // 成功             200
    SUCCESS("200", "成功"),
    
    // 系统警告         SYS_8888
    WARN("SYS_8888", "缺省系统警告！"),
    
    // 系统错误         SYS_9999
    SYS_ERROR("SYS_9999", "缺省系统错误！"),
    
    // 业务错误         BIZ-000-9999
    BIZ_ERROR("BIZ-000-9999", "缺省业务错误！"),
    
    // 设备-通信        DVC-000-XXXX(错误:0001~7999  警告:8000~9999)
    DEVICE_FIND_DEVICE_COMM_CTRL_OBJ_FAILED(String.format("DVC-000-%04d", Sn.reset(0,1)), "通过服务端口[%d]查找设备通信管理对象失败！"),
    DEVICE_PUSH_RECV_MSG_QUEUE_EXCEPTION(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:向接收消息队列放入数据时发生异常！[%s]"),
    DEVICE_POLL_RECV_MSG_QUEUE_EXCEPTION(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:从接收消息队列获取数据时发生异常！[%s]"),
    DEVICE_PUSH_SEND_MSG_QUEUE_EXCEPTION(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:向发送消息队列放入数据时发生异常！[%s]"),
    DEVICE_POLL_SEND_MSG_QUEUE_EXCEPTION(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:从发送消息队列获取数据时发生异常！[%s]"),
    DEVICE_PUSH_MQ_QUEUE_EXCEPTION(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "向MQ队列放入数据时发生异常！[%s]"),
    
    
    DEVICE_PUSH_RECV_MSG_QUEUE_FULL(String.format("DVC-000-%04d", Sn.reset(0,8000)), "服务端口[%d]:向接收消息队列放入数据,队列已满！"),
    DEVICE_POLL_RECV_MSG_QUEUE_EMPTY(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:从接收消息队列获取数据,队列已空！"),
    DEVICE_PUSH_SEND_MSG_QUEUE_FULL(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:向[%s]发送消息队列放入数据,队列已满！"),
    DEVICE_POLL_SEND_MSG_QUEUE_EMPTY(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:从发送消息队列获取数据,队列已空！"),
    DEVICE_PUSH_MQ_QUEUE_FULL(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "向MQ队列放入数据,队列已满！"),
    DEVICE_FREQUENT_NEW_CONN(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:在[%d]秒内接收到来自[%s]的新连接！"),
    DEVICE_SECOND_NEW_CONN(String.format("DVC-%03d-%04d", Sn.getCls(), Sn.getValue()), "服务端口[%d]:接收到来自[%s]的第二个连接！"),
    
 
    
    
    ;
    
    private String code;
    private String msg;
    
    ReturnCodeEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    
    public String getCode() {
        return code;
    }
    
    public String getMsg() {
        return msg;
    }
    
    public static ReturnCodeEnum codeToEnum(String code) {
        for (ReturnCodeEnum value : ReturnCodeEnum.values()) {
            if (value.getCode().equals(code)) {
                return value;
            }
        }
        return ReturnCodeEnum.UNKONW;
    }
    
    private static class Sn {
        private static int cls = 0;     // 异常分类
        private static int value = 0;   // 序号值
        
        private static int reset(int newCls, int newValue) {
            cls = newCls;
            value = newValue;
            return value++;
        }
        
        private static int getCls() {
            return cls;
        }
        
        private static int getValue() {
            return value++;
        }
    }
}
